home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 19 / Mac Magazin and MacEasy Magazine CD - Issue 19.iso / Grafik & Text & Film / bigeyedemo folder / BEman (text) next >
Text File  |  1996-02-05  |  82KB  |  1,561 lines

  1.  
  2. introduction
  3.  
  4. BigEye is a computer program designed to take realtime video information and
  5. convert it into midi messages. It runs on  any Macintosh computer running system
  6. 7 or later, QuickTime 1.6 and the Apple Midi Manager. Available in both 68000
  7. Macintosh and Power PC versions, it supports all QuickTime compatible video
  8. digitizers, including serial cameras like the Connectix QuickCam, making it usable
  9. for PowerBooks and other non-AV Macintoshes. It is also  possible to use
  10. prerecorded QuickTime movies as a video input source.
  11.  
  12. The user configures the program to extract objects of interest, based on colour,
  13. brightness and size. These objects are tracked (up to 16 simultaneously) and their
  14. position is checked against a user-defined series of ‘hot zones’.  These ‘hot zones’
  15. are drawn by the user and are grouped in ‘screens’. 
  16.  
  17. Objects and ‘hot zones’ interact in three distinct ways:  a zone sees a new
  18. object, a zone sees an old object moving, and a zone sees an object disappear.
  19. Each of these three ‘events’ can generate midi or cause internal program
  20. parameters to change. A simple example: the new event causes a note to be
  21. switched on, a move event causes a midi pitchbend and a disappear event causes
  22. the note to be switched off.
  23.  
  24. To specify the midi messages to be sent out the program provides two distinct
  25. modes: a simple mode in which the user can specify midi parameters and screen
  26. changes; and a powerful, complete scripting language that includes a real time
  27. scheduler, conditionals and loops. In the simpler environment one can quickly link
  28. to midi most of the causing object’s parameters, such as position, speed and size.
  29. In scripting mode one has many more parameters available. 
  30. BigEye provides for 16 independent ‘channels’ which can analyze the incoming
  31. image in different ways, allowing, for instance, green objects to act completely
  32. differently from objects of other colours.
  33.  
  34. Applications for BigEye are to be found in the arts, entertainment and museum
  35. world. One can think of dancers/performers ‘playing’ BigEye as an instrument,
  36. interactive museum exhibits, video ‘auto scoring’, video games accompaniment,
  37. etc. With suitable camera attachments wild applications include endoscopic music,
  38. performing bacteria (through a microscope). Also, with midi equipment other than
  39. sound synthesizers being widely available, sound mixing, light mixing, slide projector
  40. control are a few of the options.
  41.  
  42. Please communicate your experiences.
  43. aug. 1995, Tom Demeyer
  44. hardware and software setup
  45.  
  46. Due to the high demand on the computer’s processing resources it is advisable
  47. to use as fast a computer as possible. Typically achievable frame rates range from
  48. 2 frames per second on a PowerBook Duo 210 to 14 frames per second on a
  49. PPC 7100/66. (With the use of more capable video digitizer boards these rates
  50. could go  up quite dramatically.)
  51. BigEye has been tested so far (May 1995) only with the AV built-in digitizers
  52. (quadra 840AV, powermacs 6100 and 7100 and performa 630), and the
  53. Connectix Quickcam. The program should run on any QuickTime compatible
  54. digitizer, though. Please communicate your experiences.
  55. Both Quicktime 1.6 or later and the Apple Midi Manager should be on your
  56. system, QuickTime and Apple Midi Manager in your extensions folder and the Midi
  57. Driver in the system folder. 
  58. Hardware setup is simple, a video source goes into the AV card’s video input
  59. (when you only use QuickTime clips, this is of course not necessary), and a midi
  60. interface plugs into you modem or printer port. BigEye currently ignores midi
  61. input, so a single midi cable from the computer to your midi equipment is enough.
  62.  
  63. One aspect of your ‘hardware’ setup is of extreme importance. When you are
  64. working with a camera as an input source, the lighting conditions are a very
  65. important part of a previously practiced setup. The light intensity and the colour of
  66. the light is what BigEye ‘feeds’ on. Unlike the human eye, BigEye works with
  67. absolute colours and with absolute intensities. What you may perceive as identical
  68. lighting conditions may in actual fact be completely different. Be prepared the
  69. reconfigure your colour tables and your threshold settings when you move from
  70. location to location.
  71.  
  72.  
  73. ---------------------------------------------------------------------------------
  74. BASIC STRUCTURE OF THE PROGRAM
  75. ---------------------------------------------------------------------------------
  76.  
  77. The basic premise of BigEye is to interpret a video image and to convert it into
  78. midi information according to specifications set up by the user. Interpretation is
  79. done on a frame by frame basis, the program retains knowledge of previous
  80. frames, so the system is able to interpret movement. The frame rate is
  81. determined by the amount of information in the image, the processing required to
  82. extract this information and, most of all by the power of the computer. 
  83. The first step is for the user to specify which objects in the incoming video
  84. image are to be looked at and which parts of the image are to be ignored. This is
  85. done on the basis of the brightness and/or colour attributes of elements in the
  86. image (see image filters, p ). When the user has thus singled out the objects of
  87. interest, the next step is to define the ‘hot zones’ or ‘regions’ with which the
  88. objects will interact. This is done simply by drawing on the screen using the
  89. mouse; a set of simple drawing tools is provided in the ‘region edit window’ for this
  90. purpose. 
  91. The next step is to define what should happen when an object interacts with a
  92. region. Here BigEye provides for two levels of sophistication; a ‘simple mode’,
  93. where the user selects midi commands using pop-up menus and scrolling
  94. ‘numericals’, and the more powerful scripting facility where the user writes scripts
  95. describing actions to be taken when an object interacts with a region. 
  96. Interaction between objects and regions can take three distinct forms; whether
  97. in scripting mode or in ‘simple’ mode, interaction is taking place through what are
  98. called ‘new’, ‘move’ and ‘gone’ messages. 
  99. A ‘new’ message is processed by a region when it sees an object appear within
  100. its bounds, the objects can be an existing one, which is at that moment sliding
  101. from outside the region’s bounds to somewhere within, or it can be a completely
  102. new object, materializing within the region. In both cases the region triggers either
  103. its ‘new-script’ or performs the ‘new’ action list defined in ‘simple’ mode. 
  104. A ‘move’ message is processed when an existing object, already within the
  105. region’s bounds, is moving around (within its bounds). Different scripts or action
  106. lists can be associated with this ‘move’ message.
  107. A ‘gone’ message is acted upon by a region when a previously ‘newed’ object
  108. either moves outside the region’s perimeter, or disappears from the screen
  109. altogether.
  110. BigEye  provides for multiple ‘channels’ (separate data streams, based on
  111. differently coloured objects, for instance), multiple screens of region definitions and
  112. multiple colour tables.
  113. Here is a simple step by step example to illustrate the basics just described:
  114.  
  115. •Start BigEye, and from the ‘Source’ menu select ‘animation’. This selects as
  116. input to the program a simple animation of some coloured balls, to be used for
  117. testing, when a suitable video image is not immediately available.
  118. •Click and hold the module bar (just right of the right pointing arrow) and select
  119. from the pop-up  menu the ‘Colour table’. When asked, name the table
  120. ‘purple’.
  121. •A push button will appear in the window to ‘edit tables’. Click this button to
  122. bring up the table edit window (or select ‘table edit’ from the ‘windows’ menu).
  123. •In the table edit window, hold the <shift> key to freeze the animation and
  124. click on the purple ball in the left hand view. The right hand view will now
  125. display only the purple ball, the rest is black. If you misclicked, click the ‘clear’
  126. button and try again.
  127. •Close  the table edit window. 
  128.  
  129. You have now told BigEye what objects you are interested in (i.e. the purple
  130. ones) and what to ignore (everything not purple). The next step is to define your
  131. midi output:
  132.  
  133. •Click on the rightmost icon in the module bar; this will bring up the object
  134. edit section in this window. Use the topmost slider to set the ‘minimum object
  135. size’ to something small (< 5).
  136. • Click on the button ‘edit regions ..’ (or select ‘regions & masks’ from the
  137. ‘windows’ menu).
  138. •In the region edit window, select the rectangle icon from the drawing
  139. tools. With the mouse, draw a rectangle from the top left to roughly the middle
  140. bottom of the screen, so that is covers appr. half the image. 
  141. •With this rectangle selected (coloured red) click the ‘action..’  button to
  142. finally define the midi output. 
  143. •Make sure the ‘new’ button is pressed, and click and hold the ‘end’ pop-
  144. up  button in the top left. Select ‘note on’ from the pop-up , leave the channel at
  145. 1, set the pitch to f.i. 60, and set the velocity to 100.
  146. •Click the ‘move’ button at the bottom, select ‘pitch bend’ from the pop-
  147. up , leave the channel at 1, and scroll the rightmost numerical to ‘Y’ to have the
  148. y-position of the object determine the amount of bend. 
  149. •Click the ‘gone’ button  and here select ‘note off’, channel 1, pitch 60 and
  150. velocity 0.
  151. •Click ‘done’ and close the region edit window.
  152. •Back in the channel window, select ‘show regions’ and ‘show objects’. On
  153. your midi module select a sustaining sound (i.e. organ - like) and marvel at what
  154. you’ve just created.
  155. image filters
  156.  
  157. Bigeye provides five types of image filter, two of which are very important and
  158. four which are of minor usefulness. Either of the two important ones will usually be
  159. sufficient, the threshold filter for when you use a black and white camera and the
  160. colour table filter for use with a colour camera. The central idea behind these
  161. image filters is to single out those objects in a scene which are important, i.e. filter
  162. out the things in an image that you don’t want BigEye to interpret. In the end,
  163. when BigEye attempts to track objects, the only thing that counts is which pixels in
  164. the image are ‘on’ and which are ‘off’. Off pixels being pixels that are absolutely
  165. black and ‘on’ pixels holding any value other than absolutely black.  Colour or
  166. brightness information is no longer relevant at that stage. The filters in order of
  167. usefulness:
  168. •colour table:
  169.     This filter allows you to single out objects in the video image on basis of
  170.     their colour, allowing you to look, for instance, only at the green and blue
  171.     objects in a scene, or just at the red objects. It can also be used  to single out
  172.     colours you don’t want to look at, where you have for instance a background of
  173.     a particular colour (or couple of colours) that you’re not interested in, and want
  174.     too interpret at all other colours. (see colour table edit, p ). When
  175.     selected in the module bar you are presented with a shortcut button to the
  176.     colour table editor, and with a pop-up  menu which allows you to select the
  177.     current colour table.
  178. •threshold:
  179.     The threshold filter is used to single out objects through their brightness value, 
  180.     light hands against darker clothing and background, for instance. If you have a
  181.     black and white camera or digitizer the threshold filter replaces the colour table
  182.     filter as the most useful. It can be used with a color camera as well, of course.
  183.     When selected, the threshold module shows two sliders in the edit area, one
  184.     for the low threshold; values lower than this are forced to black, and one for
  185.     the high threshold, which represents the highest brightness value which is not
  186.     forced to black.
  187. •difference:
  188.     The difference filter gives you an instrument to pick only moving elements out
  189.     of  an otherwise quite complex scene, independent of colour or brightness cha-
  190.     racteristics. The filter subtracts two consecutive frames from each other and
  191.     thus retains only the differences between the two frames, which will be the
  192.     edges of moving objects. The reasons that this module is less useful than the
  193.     above two is twofold; firstly, there is no continuity: when an object is
  194.     temporarily stationary it will disappear, generating a ‘gone’ message. Second: a
  195.     moving object always generates two ‘edges’, perpendicular to the direction of
  196.     the motion. BigEye will see these edges as two separate objects, even though
  197.     they are generated by only one moving object. The difference module has just
  198.     one parameter, a threshold value, which forces to black brightness values of the
  199.     difference below a certain value. Just slide it up and down a bit to see the effect
  200.     it has in your application.
  201. •mask:
  202.     The mask filter allows you to define static regions in the image which are
  203.     to be ignored in all subsequent processing, independent of what might be going
  204.     on in these regions. As with the colour table module two buttons are presented
  205.     in the module edit area; a shortcut button to the regions & masks edit window,
  206.     and a pop-up  menu button to select the current mask screen.
  207. •despeckle:
  208.     This filter is useful to get rid of noise, random pixels, which the previous filters
  209.     may let through. It blacks out clumps of pixels which are smaller than a certain
  210.     size. In the module edit area you will see a series of radio buttons, allowing you
  211.     to select the minimum size of a group of pixels. Below this size groups of and
  212.     single pixels will be forced to black.
  213.     The Windows
  214.  
  215.  
  216. ---------------------------------------------------------------------------------
  217. THE CHANNEL WINDOW
  218. ---------------------------------------------------------------------------------
  219.  
  220.  
  221. The channel window is the main control window for BigEye, this is where you
  222. select and configure the various image filters, initial screen, and the object tracking
  223. parameters. A new channel window is opened for every channel you define.
  224. These are named by appending an ‘a’, ‘b’, etc to the name of your file (or to
  225. ‘untitled’ if you haven’t saved yet). 
  226. Several elements in the channel window are fixed, they are always there:
  227. •the monitor view: the area where either the incoming video image, or the
  228.     filtered image is displayed. The monitor view is also used to simulate objects in
  229.     the testing phase, by clicking and sliding the mouse across it. This action limits you
  230.     to one object with a fixed size, but is nevertheless very useful to test your setup
  231.     and especially you scripts.
  232. •the module bar: BigEye is processing the image in a series of modules, the
  233.     output of one module is the input to the next. A module either filters the
  234.     image, or interprets the filtered image and converts it into midi. In the module
  235.     bar one can imagine a stream going from left to right, starting at the arrow.
  236.     Clicking in the module bar produces a pop-up  menu allowing you to add a
  237.     module. Clicking on a module selects it and sets up the edit area (see below) to
  238.     edit the parameters of this module. Clicking a module and holding the mouse
  239.     down for a while gives you the same pop-up  menu again, with the option to
  240.     remove the module, or change it to another. One module is fixed and is always
  241.     there: at the far right of the module bar you’ll find the objects module. This is
  242.     not an image filter, rather it is the module which takes the previously filtered
  243.     image and does the actual interpretation and midi generation. Its edit field will
  244.     be discussed below.
  245. •the view bar: this bar allows you to select what to display in the monitor view,
  246.     and also to switch the monitor view off to save processing time. Clicking the
  247.     view bar above any module in the module bar (see below) switches the view in
  248.     the monitor to the video image as it looks after being processed by this filter
  249.     module. A red bar will show in the view bar tell you what you’re looking at.
  250.     Clicking this red bar itself switches the monitor view off. When you click the
  251.     view bar above the arrow in the module bar you will switch the view to the
  252.     video source image.
  253. •channel on/off switch allows you to completely disable the processing for this
  254.     particular channel. In a performance this function is also accessible through the
  255.     scripts. (see channel command, p  ).
  256. •module edit area: when one of the modules in the module bar is selected it
  257.     sets up the top right hand area of the channel window with buttons and sliders
  258.     to edit and adjust its parameters. See image filters (p ) for a look at the editable
  259.     parameters of each of the filters.
  260.  
  261.  
  262.  
  263. With the last module in the module bar selected, and the view set to this
  264. module (red bar above the module) you will have the best indication of how
  265. BigEye is dealing with your settings and your image.
  266. If you have not activated show objects the monitor image will show you the
  267. image as it appears after the last filter. When you activate the show objects
  268. checkbox the monitor image will show you your source image, with superimposed
  269. on it the objects that BigEye has found. Objects are represented by a number
  270. (the object number) and a vector. The vector gives you a graphical representa-
  271. tion of the object’s direction and speed (longer vectors are higher speed), the
  272. object number is available in your scripts (see also the accur parameter p .
  273. When you activate the show regions checkbox BigEye will draw the current
  274. screenful of regions in the monitor view. When you select another screen through
  275. the screen command (p  ) this new screen will be drawn, although the screen
  276. pop-up  will not show the new name. 
  277. The top button is a shortcut to the screen editor, the second button is the initial
  278. screen pop-up .  BigEye will start with the screen selected here after an Initialize
  279. (p  ) command.
  280. Finally, there is the minimum object size slider which allows you to specify a
  281. minimum object size which you are interested in; objects smaller than this size are
  282. simply not seen by the interpreter.
  283.  
  284. ---------------------------------------------------------------------------------
  285. THE COLOUR TABLE EDITOR
  286. ---------------------------------------------------------------------------------
  287.  
  288.  
  289. In the colour table editor you make the colour tables you will be using in your
  290. performance. A colour table (one of the image filters) allows you to define which
  291. colours should be blocked by the system and which should be allowed through for
  292. further processing. If a colour is blocked it means that the corresponding place in
  293. the image will be completely black and will not be analyzed by BigEye in
  294. subsequent stages. Any combination of colours can be selected to be blocked or
  295. to be let through and you can make different colour tables which you can later
  296. select through software (see colour table p ) or can be used in different
  297. channels. It is quite important to realize that the purpose of the image filters is to
  298. significantly reduce the amount of information BigEye needs to process. A well
  299. defined colour table should in general show, therefore, an almost black image on
  300. the righthand side, with only spots of colour here and there. 
  301.  
  302. When you make a new table it is initially cleared, none of the colours are allowed
  303. through. You will slowly build up your table by clicking in the left image, which is
  304. the unprocessed source image, on the objects of the colour you want BigEye to
  305. see. As you click along you will see objects of the selected colours appear in the
  306. right image. As the program compares 32000+ colours with the colour you click
  307. on the response might be a bit sluggish on slower machines. To make the clicking
  308. on moving objects a bit easier you can press the SHIFT key to temporarily freeze
  309. the image; CAPSLOCK will also freeze the image (a bit more permanently).
  310.  
  311. Since you are usually interested in objects of a particular colour, and not in the
  312. colour itself, and since objects in real life are very rarely precisely one colour,
  313. BigEye accepts not only the actual colour you click on, but also colours within a
  314. certain ‘distance’ from the target colour. This is what the bleed slider is control-
  315. ling. The numbers don’t refer to any real quantity, a lower number means that
  316. BigEye is looking only at a narrow range around the colour you click on; move the
  317. slider more to the right and more and more shades will be selected with your
  318. click.
  319. If you move the bleed slider you may  (again, on slower machines) find it moves
  320. in a very jerky fashion. This is because BigEye is recalculating the table for the last
  321. colour you clicked on, with the new bleed values, as you slide.
  322.  
  323. The add and subtract radio buttons control wether the clicked colour is added
  324. to the allowed colours or subtracted from them.
  325. The clear button clears the table and leaves no colour selected.
  326. Finally you have the current table pop-up  at the bottom of the window to
  327. select which table you will be working on.
  328.  
  329. ---------------------------------------------------------------------------------
  330. REGIONS & MASKS EDIT
  331. ---------------------------------------------------------------------------------
  332.  
  333. The RegionDef window is the most complex window of the program. It is used
  334. both to edit your screens (presets) and to edit masks. 
  335. A  screen in BigEye is a collection of regions (hot zones), together with a hierar-
  336. chy of scripts or action lists and three parameters which control the basic
  337. behaviour of the video interpretation. One screen is always defined, initially named
  338. ‘screen 1’, but easily renamed to something more meaningful. BigEye does not
  339. limit the amount of screens you define, available memory does.
  340. A mask is basically just a screenful of regions, without the associated action lists
  341. or scripts,  used to block (or mask out) sections of the image which should not be
  342. interpreted by BigEye.  Any screen can serve as a mask, but if you have a need
  343. for masks you will usually make it a separate screen, not used for anything else.
  344.  
  345. At the top right of the screen is the current screen pop-up  button; clicking and
  346. holding the mouse here produces a pop-up  menu. The ‘new..’ entry will prompt
  347. you for a name, after which a new empty screen is created, ready for you to
  348. draw your regions in. The ‘rename’ entry will prompt you for a name, and then
  349. sets the name of the current screen to it. ‘Delete’ deletes, without asking, the
  350. current screen; this action is not undoable! Below these three entries comes a list
  351. of all currently defined screens, select any of them to change or add to that
  352. screen. 
  353. Below the current screen pop-up  button is the action list / scripts button. In
  354. Script mode this button is called ‘scripts’ and is simply a shortcut to the script edit
  355. window. If you are not in script mode it will be called ‘action .. ‘ and, when clicked,
  356. will transform the left hand side of the regions window into the action list editor for
  357. the currently selected region. See below for more  on the action list editor.
  358.  
  359. Defining a screen begins with drawing the regions in the image using the small
  360. collection of drawing tools provided (if you start a new screen you will first have to
  361. choose ‘New .. ‘ from the current screen pop-up ). The drawing tools behave
  362. basically just as in a graphics program; the coordinate help region at the top left of
  363. the window shows you the coordinates you are drawing at, which may be useful
  364. as a reference in writing your scripts or action lists later.
  365.  
  366. •arrow tool
  367.     Is used for selecting drawn regions, moving selected regions and scaling a
  368.     selected region. Selecting a region is a matter of clicking inside the region with
  369.     the arrow tool, after which the region will be drawn in red. Regions which are
  370.     not selected are drawn in blue. Holding the <shift> key allows you to select
  371.     additional regions, as does ‘dragging’ the arrow across the screen. The basic
  372.     ‘Cut’, ‘Copy’, ‘Paste’ and ‘Clear’ commands from the ‘Edit’ menu apply to the
  373.     regions as you would expect, regions are copied including their action lists and
  374.     scripts, so if you intend to make many similar regions it saves a lot of work to
  375.     first draw one region, then define its scripts or action lists, and  only after that
  376.     do you copying and pasting.
  377. •pen tool
  378.     The pen tool allows you to draw in freehand any shape you may desire. Click
  379.     and hold the mouse, draw to you heart’s content, and release the mouse.
  380.     Choose ‘Clear’ from the Edit menu and start over if you don’t like the result.
  381.     Since the image is updated continuously drawing will not be very smooth, draw
  382.     slowly for smooth curves. BigEye automatically connects the first and last points
  383.     of your shape, to close it.
  384. •rectangle tool
  385.     Draws rectangular regions, click the top left and drag to the bottom right. Using
  386.     the rectangle tool changes the coordinate help format to <top, left - height,
  387.     width> format.
  388. •row tool
  389.     You start out just as with the rectangle tool to draw the enclosing rectangle,
  390.     when you release the mouse, however, you are prompted for the number of
  391.     rows you want to divide this rectangle in. Enter your desired value and BigEye
  392.     will make you that many regions, stacked neatly inside the enclosing rectangle.
  393.     See the comment on grids, below.
  394. •column tool
  395.     Works just as the row tool, the regions are defined in a column like fashion.
  396.  
  397. Although it is certainly possible to define a grid by drawing many small  square
  398. regions all over the image, it is highly inefficient. When you consider that each
  399. defined region has three scripts or action lists associated with it and that for every
  400. frame and for every object BigEye has to check the object position against all these
  401. regions, you may start to appreciate this. A far better way to define a grid is to
  402. draw one big region covering the total size of the grid and then, using simple
  403. arithmetic in the scripts of this region, define the grid ‘in software’. For instance, to
  404. define an 8 by 5 grid covering the entire screen, start by drawing a rectangular
  405. region from the top left of the screen to the bottom right. In, for instance, the
  406. ‘new-script’ of this region you would have something like:
  407.     x = x_position / 20
  408.     y = y_position / 24
  409. x will now hold a value between 0 and 7 (inclusive) and y will be between 0 and
  410. 4.
  411.  
  412. Every screen in BigEye has three parameters which allow you to influence the
  413. way in which BigEye detects and follows objects. Three sliders at the righthand
  414. side of  this window are used to adjust these. The leftmost of these sliders,
  415. labelled ‘accur’ is fairly obscure. the ‘accur’ stands for positional accuracy, the
  416. higher the setting the more accurate BigEye will number the objects on screen.
  417. Unfortunately, the higher the positional accuracy, the lower the dynamic accuracy
  418. (hence the nickname Heisenberg slider). So, when you want your object
  419. numbering to be very precise (once an object has acquired a number, then this
  420. same object will retain this same number, numbers tend to jump around less)
  421. slide the accur slider up a lot. On the other hand,  for a fast dynamic response, 
  422. when you have, for instance, assigned a different sound to an object when it has a
  423. speed exceeding a certain threshold, you should use a lower value for thew
  424. ‘accur’ parameter. Experimentation with this slider will give you a feel for how it
  425. behaves. In short, when you are playing a ‘drum’ use a low setting, when you are
  426. playing violin with one hand and clarinet with the other use a high setting.
  427.  
  428. The second slider, labelled ‘perst’, controls the object persistence parameter.
  429. Object persistence allows you to keep objects around for a while after they have
  430. physically disappeared from the screen. BigEye calculates speed, position and
  431. other parameters based on the speed etc. of the object before it vanished. The
  432. object_virtual special variable is set to true and BigEye pretends the object is still
  433. there for the specified number of frames. There are several situations where this
  434. functionality is desirable; when two objects briefly cross paths the object count
  435. goes from two to one to two. With a persistence parameter other than zero you
  436. will keep the object count to two and, with a bit of luck, you will even have the
  437. correct object numbering after the ‘collision’. In another situation you may have
  438. masked out a small region in the image, making objects briefly disappear when the
  439. ‘fly’ across this masked out region. Again, set persistence to a couple of frames and
  440. you have a good chance that the actual object is ‘picked up’ again after it
  441. reappears by the virtual object. In this case the object_virtual flag is cleared and it is
  442. as if the object never disappeared.
  443.  
  444. The third slider, labelled ‘maxob’, controls the maximum number of objects
  445. BigEye will look for. Set to two, for instance, BigEye will cancel the object search
  446. after it has identified two objects. It makes object numbering more accurate, and
  447. it saves some time if you set this slider as low as your application allows.
  448.  
  449. Lastly, in this window you will find three checkboxes, labelled
  450. ‘renumber’,’numbered’ and ‘filled’. These are concerned with the order in
  451. which BigEye will search for objects in overlapping regions. In the case an object is
  452. detected in a region which overlaps another, scripts associated with the lowest
  453. numbered region are executed first, successive higher numbered regions later. 
  454. The ‘filled’ checkbox makes BigEye draw the regions opaque, giving you an
  455. easy view of which regions lie on top and which are below. Lower numbers will
  456. appear on top of higher ones. ‘Numbered’, which is on by default, draws the
  457. region numbers in the regions, for easy reference if you use the region numbers
  458. in your scripts, for instance. You can switch off the region numbering if the display
  459. gets to cluttered. If you want to change the region numbering, to match you
  460. scripts code, or to change the order of overlapping regions, click the ‘renumber’
  461. checkbox. After clicking the renumber button you should select the regions in the
  462. new order, lowest numbers (topmost regions) first. After you select the regions in
  463. this way they will turn green, and the new numbers will appear in brackets in the
  464. regions. After you have selected the last region the renumbering will be executed.
  465. If you want to cancel the renumbering, or want to start again because you have
  466. made a mistake you can click the renumber button to stop the process.
  467.  
  468. ---------------------------------------------------------------------------------
  469. THE ACTION LIST EDITOR
  470. ---------------------------------------------------------------------------------
  471.  
  472. When you click on the action.. button when you have a region selected in the
  473. region defs editor, you will be taken to the action list editor. The action lists
  474. provide a simple interface to BigEye. The drawback is that most of the power you
  475. have when you use the scripting interface will not be available to you. When your
  476. needs are simple, or when you do your intelligent processing in another program
  477. (i.e. MAX) with which you communicate through midi, the actions lists may be
  478. sufficient. 
  479. In the action lists editor you are able to specify (midi) events in response to
  480. objects entering, moving in, or leaving a region. The bounding rectangle of the
  481. region you are editing is printed at the top  of the window for reference. At the
  482. bottom of the window you will find five buttons; the new, move and gone
  483. buttons take you to the action lists associated with the regions’ respective events,
  484. the cancel button takes you back to the region editor without changing any of the
  485. action lists and the done button accepts changes to the action lists and also goes
  486. back to the region editor.
  487. An action list consists of up to 10 midi messages which will be sent when the
  488. corresponding event occurs. At the left you will find one to ten pop-up  menus,
  489. where an end always signifies the end of the list. To the right of these pop-up 
  490. buttons you will find from one to four parameter buttons, which are ‘numericals’;
  491. click the mouse on them and move (with the mouse button still down) up and
  492. down to scroll through the list of available values. Let’s have a look at the pop-up 
  493. menus on the left, to the right of the entries you will find the meaning of the
  494. parameters:
  495.  
  496.  
  497.  
  498.  
  499. end:    The end of the list;
  500. nof:        Send midi note off; channel, pitch, off velocity
  501. non:    Send midi note on; channel pitch velocity
  502. pkp:    midi poly key pressure; channel, key, pressure
  503. ctl:        midi controller; channel controller number, value
  504. pgc:    midi program change; channel, program
  505. prs:    midi channel pressure; channel, pressure
  506. pbd:    pitch bend; channel, low value, high value
  507. note:    send note; channel, pitch, velocity, duration
  508. screen:    change screen; screen name
  509.  
  510. In the numericals you will find, next to a range of numbers (0-15 for channel, 0-
  511. 127 for other midi parameters) several other selectable mnemonics. These access
  512. attributes of the object or region which is triggering the event for use in the midi
  513. message. 
  514. Several of these are dynamically scaled into the midi range (0-15 or 0-127,
  515. depending on the use), sze and V are used most. Dynamical scaling is a
  516. somewhat unsatisfactory but nevertheless useful way of getting numbers into a
  517. specific range, even when you don’t know in advance what range the numbers
  518. will be in. What it means is that the largest number seen so far is translated into
  519. the maximum target value (127, for instance), and when lower numbers are seen
  520. they are scaled accordingly. When a new, larger, source number is seen this will
  521. then be the target 127. The upshot is that, when you start up, relatively small
  522. numbers will be scaled to big values, until the system sees larger source numbers
  523. and converges onto an acceptable scaling. It also means that when you will have
  524. one freak large number, which is not normally produced, this number will redefine
  525. the 127 and all next numbers will be scaled to values which will be too small. To
  526. reset the dynamic scaling values (and have the system recalibrate) you can hit the
  527. space bar at any time a channel window is frontmost. What it boils down to is
  528. that you will have to exercise the system a bit before actual use. 
  529. (If this behaviour is unacceptable you will have to resort to scripting, where you
  530. will have complete control over the scaling).
  531. Here are the object attributes available:
  532. •X and Y are the absolute coordinates of the object in the image, scaled into the
  533.     appropriate midi range where left or top is 0 and right or bottom is 127 (or 15).
  534. •(X) and (Y) are the coordinates relative to the region the object is in. If the
  535.     object is at the extreme left of the region (X) will be 0; is the object at the
  536.     extreme right of the region (X) will be 15 or 127.
  537. •vX and vY are the component velocities: up means vY is smaller than zero,
  538.     left means that vX will be smaller than zero. These are dynamically scaled.
  539. •V is the velocity of the object, dynamically scaled into the midi range.
  540. •aX and aY are the component accelerations, really the difference between the
  541.     current and the previous component velocity.
  542. •sze is the, dynamically scaled, size of the triggering object.
  543. •obnm is the object number as can be seen in the channel window when you
  544.     have the show objects check box activated.
  545. •lon is a special one, it stands for last on and is used only with the note off
  546.     message. When you use this the channel and the pitch information in the
  547.     message is taken from the last not on message that was sent. This means that
  548.     the channel information in this message can be set to anything, since it is
  549.     discarded anyway. On notes are kept on a stack; the lon attribute uses them
  550.     on a last in, first out basis.
  551. •rgnm is the region number of the region containing the triggering object.
  552.  
  553.  
  554. ---------------------------------------------------------------------------------
  555. THE SCRIPT EDIT WINDOW
  556. ---------------------------------------------------------------------------------
  557.  
  558. In script mode, this is the window where you write your scripts and where you
  559. navigate between the, sometimes many, scripts. As a reminder, in a BigEye
  560. performance you have one global script; for every screen you define you have a
  561. start- and a stop-script, and for every region in every screen you have a new- a
  562. move- and a gone-script. All of these scripts are accessible through this window. 
  563. The editor in this window is your basic Macintosh text editor, without much
  564. sophistication. Cut, copy and paste all work as usual. Syntax colouring is provided
  565. for BigEye scripting keywords (blue) and for special variables (green). Tab-size is a
  566. fixed 4 positions, and an overall font and font size can be selected.
  567. The righthand side of the window changes depending on the particular script you
  568. are editing; some buttons are fixed, however. Let’s have a look at these fixed
  569. buttons first: 
  570. •the global button always takes you to the global script, whatever you are
  571.     editing at that moment. There is no explicit need to save the script you may be
  572.     working on when you click a button to edit another scrip; they are saved
  573.     automatically. Regularly selecting save from the file menu is a good idea,
  574.     however,  but this will save the complete BigEye performance file (including all
  575.     the scripts) you are working on.
  576. • the p pop-up  menu on the righthand side (p for parameter) will pop up a
  577.     menu with all the special variables you can use. Selecting any of them will insert
  578.     it into the text, at the cursor position. This shortcut saves you typing tedious
  579.     names and prevents typing errors.
  580. •the screen pop-up  below the global button presents you with a pop-up 
  581.     menu of all currently defined screens, giving you access to their start-script,
  582.     stop-script and their regions’ scripts. When you select a screen from this menu
  583.     the righthand side of the window will show a small picture of the selected
  584.     screen, in addition to two extra buttons (start and stop)
  585. •the font and size pop-up  buttons allow you to selects a font and size to be
  586.     used in the editor. These settings are global, they affect all scripts. Fonts and
  587.     sizes cannot be mixed. The first time you select the font pop-up , on a machine
  588.     with many fonts installed, it may take a while before it actually pops up.
  589.  
  590. When you select a screen from the screen pop-up , a start and a stop button
  591. will appear. These will take you to the screen’s start and stop-script for editing. In
  592. addition to these, a small picture of the selected screen will appear near the
  593. bottom of the window. This picture is also clickable; click on any of the regions
  594. visible in the picture to take you to this regions scripts. The region in the screen
  595. picture will change appearance to indicate the region you are working on, and the
  596. start and stop buttons (if they were there) will disappear to make room for three
  597. other ones: the new the move and the gone buttons. Click these buttons to
  598. edit the respective scripts of the selected region. 
  599. Clicking in the picture between the regions will take you back to the regions start
  600. and stop-scripts, as will reselecting the screen from the screen pop-up  menu. 
  601.  
  602.  
  603. ---------------------------------------------------------------------------------
  604. DIGITIZER SETTINGS WINDOW
  605. ---------------------------------------------------------------------------------
  606.  
  607.  
  608. From this window you control the video digitizer directly, and optionally select
  609. which digitizer you will use. The different options available in the settings window
  610. may not be available for the digitizer you are using, for instance, in the Connectix
  611. Quickcam digitizer the only thing you can change is the brightness, the rest of the
  612. settings have no effect. The Apple built in digitizer in the AV macs has a limited
  613. zoom function which is accessible through the set of radio buttons in this window.
  614. Click any of the 0.5 .. 0.9 buttons and a rectangle will appear in the image
  615. window. This rectangle can be moved around with the mouse to position it over
  616. the part of the image you want to zoom into. Clicking the apply button will then
  617. effect the zoom. To experiment with other zoom factors, first click the reset
  618. button. Contrast, brightness and saturation may or may not be available, just try.
  619. Also, if the input source is not ntsc you may want to click around on the three
  620. radio buttons on the right.
  621. If you have more than one video digitizer installed in your computer a second set
  622. of radio buttons will appear in the lower right of the window, up to a maximum of
  623. three. These are then used to select the digitizer you want to use.
  624. the message window
  625.  
  626. The message window is used both by the program to display messages and
  627. possibly by you to display numbers or strings through the display command (p 
  628. ). The message window is resizable; you can also change the font and -size in
  629. which the messages are displayed. 
  630. To change the font hold the option key and click anywhere in the message
  631. window. The first time you do this be prepared to wait a bit while BigEye is
  632. collecting all the fonts in your system.
  633. To change the fontsize hold the command key and click in the window.
  634.  
  635.  
  636. ---------------------------------------------------------------------------------
  637. SCRIPTS
  638. ---------------------------------------------------------------------------------
  639.  
  640. When scripting mode is enabled (configuration menu) actions to be taken by
  641. BigEye in response to specific events are specified through scripts. Scripts are
  642. basically a series of structured commands that tell BigEye, step by step, what to do
  643. in a specific situation. The scripting system is a programming language, and users
  644. inexperienced in computer programming will have to invest time in order to be
  645. able to use the BigEye scripting system to its full potential. Reading an introductory
  646. text on computer programming may be helpful. Careful reading of this manual and
  647. study of the provided example files will be of use to everybody.
  648.  
  649. There is one global script for system wide definitions, there are two scripts for
  650. each defined screen and three scripts for each region in a screen.
  651.  
  652. The global script is never executed directly in response to any event in BigEye. It
  653. typically holds code that is called from other scripts (procedures), definitions of
  654. variables that need to be available to all other scripts, and table definitions.
  655.  
  656. The two screen scripts, called the start-script and the stop-script hold
  657. definitions for variables which need to be available to these two scripts and to the
  658. region scripts defined in this screen. These scripts are executed: the start-script is
  659. executed when a screen is selected through a screen command in another script
  660. or through the screen select pop-up  menu in the channel windows. The start-
  661. scripts of the screens selected in the channel windows are also executed after a
  662. successful init & run command. The stop-script  is executed whenever the screen
  663. to which it belongs is replaced by another screen, either through a screen
  664. command in another script or through the screen select pop-up  in the channel
  665. window. A typical use of start-scripts is for instance to use them to send program
  666. changes to connected synthesizers when new screens are selected. 
  667.  
  668. The three region scripts are called the new-script, the move-script and the
  669. gone-script. These scripts strictly belong to the region to which they are attached;
  670. variables which are declared in either one of these scripts are available to all three,
  671. but nowhere else. See variables (p  ) for a more thorough explanation of these
  672. variable validity issues. The new-script is executed whenever an object either
  673. materializes in the region or when an object moves into the region from the
  674. outside. The move-script is called when an existing object, already in the region,
  675. moves. The gone-script is called when an object previously seen in the region
  676. either crosses the border and moves outside the region, or the object simply
  677. disappears.
  678.  
  679. The simplest approach to programming BigEye is probably to define variables,
  680. tables and procedures in the global script and, in the other scripts, to concentrate
  681. on the actions to be performed. Once the concept of variables local to a region
  682. and variables local to a screen become clear one can ‘unclutter’ the global script
  683. by moving definitions to where they are used.
  684. Variables
  685.  
  686. All variables in the BigEye language are floating point, that is, they can hold fractio-
  687. nal numbers as well as integer numbers. The range of floating point numbers is
  688. very big, although in the very big and very small the number representation will
  689. not be exact. In the range you’ll likely be working in representation is exact.
  690. Floating point has two main advantages over whole number representation: you
  691. can use fractional values (i.e. 2.5, 0.2 etc) and you  avoid rounding errors when
  692. doing calculations. BigEye will convert these floating point numbers into integers
  693. (whole numbers) when necessary; when using midi calls for instance, or when
  694. doing bit manipulations. Usually all this is completely transparent, you need never
  695. explicitly convert to integer numbers. An int (p  ) function is provided, however,
  696. for those cases where you’re interested in the integer part of a number only.
  697. Variables do not strictly need to be defined before they are used; it is an error,
  698. however, to use an undefined variable before any value is assigned to it (i.e. in the
  699. righthand side of an expression). In general it is wise and much clearer to define all
  700. variables used.
  701. The scope of a variable is the concept of where a variable is valid in the code. If a
  702. variable is out of scope in a certain section of the code (in a particular script in
  703. BigEye) it means that the variable is simply not known at that point. In BigEye this is
  704. determined through the place where the variable is declared. Variables declared in
  705. the global script are always in scope, they are known in all scripts. Variables
  706. declared in the start and stop-scripts of the screens are known only in these two
  707. scripts and in all the region scripts of this particular screen. Variables declared in
  708. the new, move and gone-scripts of a region are known only in these three scripts
  709. and are valid for this particular region only. And lastly, variables declared in
  710. procedure definitions or are as parameters to the procedure (p  ) are local to
  711. the procedure, and will not be recognized anywhere outside the procedure
  712. definition. The advantage of this rather complex arrangement is that you can
  713. declare, for instance, a variable called current_note in a script belonging to a
  714. certain region, and a variable with the same name in a script belonging to another
  715. region without the two variables interfering with each other; the first
  716. current_note is out of scope in  the second region’s scripts and will not be
  717. confused with the current_note of the region under consideration. This means
  718. that you can use the same name for variables with the same function in different
  719. scripts, making for much more readable code.  Variables declared locally in
  720. procedure definitions are not permanent, they do not retain their value across
  721. calls to the procedure. All other variables are permanent. In scheduled code (p 
  722. ) you should use only globally declared variables, or (fleeting) variables declared
  723. locally in the scheduled procedure’s definition. See smooth p  for a way to filter
  724. variable values.
  725.  
  726. ---------------------------------------------------------------------------------
  727. PREDEFINED VARIABLES
  728. ---------------------------------------------------------------------------------
  729.  
  730. A series of special variables is predefined, and will hold values relevant to the ob-
  731. ject which is causing the script to be executed, the region to which the script is
  732. attached, and some global information which might be useful in a specific context.
  733. These variables are all strictly read only, attempts to write to these variables will
  734. result in an error message. The contents of these variables is not defined in code
  735. which is executed through the scheduler; when these values are needed in sche-
  736. duled code you can either pass it to the code to be scheduled as a parameter or
  737. copy the value into a normal variable which is then read by the scheduled code.
  738.  
  739. •x_position
  740.     The x_coördinate of the absolute position of the current object, (0  to 159).
  741.  
  742. •y_position
  743.     The y_coördinate of the absolute position of the current object, (0  to 119).
  744.  
  745. •object_size
  746.     This variable holds the size (in arbitrary units) of the current object, one of the
  747.     more powerful variables, giving you a virtual third dimension (moving toward
  748.     and away from the camera will change the object size). The object size can
  749.     take (floating point) values from 0 to about 130 (which would cover the whole
  750.     screen).
  751.  
  752. •object_speed
  753.     The speed of the current object (in pixels per frame), the number of pixel
  754.     positions between the previous and current position of the object. 
  755.  
  756. •object_direction
  757.     The direction of the current object. North is zero, east is 1.57 (pi / 2), south is
  758.     3.14, west is 4.71 and a few degrees west of north is almost pi * 2 :). Of
  759.     course you will get intermediate values for intermediate directions.
  760.  
  761. •x_speed
  762.     The speed in the x_direction, in pixels per frame. Can be negative as well as
  763.     positive; negative values indicate movement to the left, positive values mean the
  764.     object is moving to the right.
  765.  
  766. •y_speed
  767.     The speed in the y_direction, in pixels per frame. Can be negative as well as
  768.     positive; negative values indicate movement up, positive values mean the object
  769.     is moving down.
  770.  
  771. •channel_number
  772.     The channel_number special variable is set to the channel number of the current
  773.     channel, the channel which caused the script in which the variable is used to be
  774.     executed. Channel ‘a’ is given channel number 0 (zero), channel ‘b’ will be 1
  775.     (one) etc.
  776.  
  777. •current_tick
  778.     The current_tick variable holds the interrupt schedulers’ tick count; the schedu-
  779.     ler is called every 5 milliseconds, so the value of current_tick is the number of 5
  780.     ms ticks since the last initialize & run (command I). See also scheduler, p 
  781.  
  782. •object_count
  783.     Holds the number of objects active in the current frame, anywhere from one
  784.     (zero objects would never cause the script in which this variable is used to be
  785.     triggered) to 16. 
  786.  
  787. •object_number
  788.     The number assigned by BigEye to the current object, corresponding to the
  789.     those one sees in monitor mode and in the object edit screen, with the show
  790.     button selected. These numbers are fleeting, BigEye tries its best to keep the
  791.     same object number assigned to an object throughout its life, but sometimes
  792.     fails to do so properly. In the screen editor one can adjust several parameters
  793.     which affect the assignment of numbers to the objects. See regions & masks
  794.     edit, p  
  795.  
  796. •object_virtual
  797.     This variable holds only two values, zero and non-zero (false and true). It re-
  798.     flects the state of the object, is it an actual physical object, or is it an object
  799.     made up by BigEye for continuity. See persistence (p  ) 
  800.  
  801. •region_max_x
  802.     This variable holds the maximum x coordinate of the region to which the
  803.     current script is attached. (0 to 159) See scaling coordinates (p  )
  804.  
  805. •region_max_y
  806.     The maximum y-coordinate of the current region. (0 to 119)
  807.  
  808. •region_min_x
  809.     The minimum x_coördinate of the current region.
  810.  
  811. •region_min_y
  812.     The minimum y-coordinate of the current region.
  813.  
  814. •region_number
  815.     The number of the current region, as visible in the region edit screen with the
  816.     numbered button selected.
  817.  
  818. •object_acceleration
  819.     This variable holds the acceleration of the object triggering the current script, it
  820.     is simply the difference in speed of the object between the previous frame and
  821.     the current frame.
  822.  
  823. •x_acceleration
  824.     See object acceleration, in this case the difference between the x_speed of two
  825.     consecutive frames.
  826.  
  827. •y_acceleration
  828.     See object acceleration, in this case the difference between the y_speed of two
  829.     consecutive frames.
  830.  
  831.  
  832. ---------------------------------------------------------------------------------
  833. Expressions
  834. ---------------------------------------------------------------------------------
  835.  
  836. In the following descriptions of the BigEye scripting language you will very often
  837. come across the word expr; this is short for ‘expression’ and can be:
  838.  
  839. •a number, which can be either ordinary decimal 1, 2.6, -765.23, etc,  or hexa-
  840.     decimal: $1, $2, $15, $77, etc. One can also use character literals of the form
  841.     ‘a’ or ‘7’; note the apostrophes, they are part of the syntax. These character
  842.     literals are immediately converted into their ascii number equivalent and act just
  843.     as numbers. So ‘A’ and 65 are identical ‘numbers’ as far as BigEye is concerned.
  844.     All numbers are floating point and are automatically converted to integers
  845.     (whole numbers) when necessary (midi, bit operations).
  846. •an identifier, i.e. a variable name or one of the special variables to be discussed
  847.     below. 
  848. •a function call. 
  849. •Any combination of the above strung together with any of the following
  850.     operators:
  851.     Operators are given in order of precedence, i.e. if you see something like 'a +
  852.     b * c', 'b*c' will be evaluated first, then ‘ a + ‘. In this case one says that the '*'
  853.     operator takes precedence over the '+' operator. In the table below operators
  854.     with the highest precedence are given first. Operators in the same section have
  855.     equal precedence and are 'left binding'. Left binding means 'a * b / c'  will be
  856.     evaluated as (a*b) / c; i.e. is evaluated from the left. Some of the operators are
  857.     denoted as boolean. This means is that they will only have two distinct values,
  858.     true and false. Typically they are used in 'if' statements, their actual values are 0
  859.     for false and -1 for true, although in a boolean context (in an if statement for
  860.     example) any value other than 0 will be treated as true and can be used as a
  861.     boolean;  
  862.     var a = 20; if(a) { do something }
  863.     is legal and often very useful;   
  864.  
  865. (...)
  866.     Parens group subexpressions, and are used to force a different order of
  867.     precedence as needed; ' (a+b)*c ' makes sure the addition is performed
  868.     before the multiplication.
  869.  
  870. The following four operators are 'unary', they only affect the subexpression
  871. immediately to the right of them.
  872.  
  873.     Logical negation, if the subexpression immediately to the right evaluates to
  874.     true, it would be changed to false, and vice versa. For example: 
  875.  
  876.     if(!object_virtual) { 
  877.         note(0,y_position, object_speed * 2,100)
  878.         sent = true
  879.     } 
  880.  
  881. ~
  882.     bitwise negation; the expression to the right of the ~ is evaluated,
  883.     converted into a (32 bit) integer and then every bit in this integer will be flipped. 
  884.  
  885. -
  886.     negates the subexpression to the right, 1 becomes -1; -20 becomes 20
  887.     etc. 
  888.  
  889. The following five are the regular arithmetical operators, they behave just as
  890. expected.
  891.  
  892. expr / expr
  893.     divide 
  894. expr % expr 
  895.     take modulus (remainder after (integer)division) 
  896. expr * expr
  897.     multiply 
  898. expr + expr
  899.     addition 
  900. expr - expr
  901.     subtraction
  902.  
  903. The next three are bit operators, these operators work on the bit level and are
  904. useful to mask out midi channels and such things. Bit manipulation needs a working
  905. knowledge of the binary representation of numbers in a computer. Numbers are
  906. converted to integers before any of these operations are carried out.
  907.  
  908. expr & expr
  909.     bitwise and 
  910. expr | expr
  911.     bitwise or 
  912. expr ^ expr
  913.     bitwise exclusive or
  914.  
  915. channel = channel & 15;
  916.  
  917. forces the variable channel into the range 0 - 15. Be aware that we’re talking
  918. about bitmanipulation; myVar = myVar & 16; will not force myVar to be in the
  919. range 0 - 16, rather, it will set it to either 16 or zero, depending on its previous
  920. value.
  921. The ‘exclusive or’ operator is very convenient to ‘toggle’ the state of a boolean
  922. variable:
  923.  
  924.     var sustain = 0        // declaration of ‘sustain’ 
  925.     sustain = sustain ^ 127    // 127 becomes 0 and 
  926.                         // 0 becomes 127
  927.     ctr(0,64,sustain)
  928.     end
  929.  
  930. This small program will alternate between switching sustain on midi channel one
  931. on and off.
  932.  
  933. The next two are also operators on the bit level;   ‘ a >> b’ shifts ‘a’  ‘b’ places
  934. to the right.
  935.  
  936. expr >> expr
  937.     shift right 
  938. expr << expr
  939.     shift left  
  940.  
  941.  
  942. The remaining operators are all boolean, they evaluate to a true or false, a -1 or
  943. a 0. 
  944.  
  945. expr > expr
  946.     greater than 
  947. expr < expr
  948.     smaller than 
  949. expr >= expr
  950.     greater than or equal to 
  951. expr <= expr
  952.     smaller than or equal to  
  953. expr == expr
  954.     equal 
  955. expr != expr
  956.     not equal
  957.  
  958. expr1 && expr2
  959.     logical and 
  960. expr1 || expr2
  961.     logical or
  962.  
  963. The last two operators  leave a true if both expr1 and expr2 are true or in the
  964. or case if either expr1 or expr2 is true.
  965.  
  966. Lets give just one example for the last bunch:
  967.  
  968.     if( a && distance > 150 && ( pressure <= 10 || always == true)) 
  969.      a = false;
  970.  
  971. will set a to false when a is true, distance is bigger then 150 and either
  972. pressure is smaller than or equal to 10 or always is nonzero.
  973.  
  974. In order of precedence:
  975.  
  976. ( ) 
  977. ! ~ - 
  978. * / % 
  979. + - 
  980. & | ^ 
  981. >> << 
  982. >< >=<= == != 
  983. && ||
  984.  
  985.  
  986.  
  987.  
  988. ---------------------------------------------------------------------------------
  989. BIGEYE SCRIPTING KEYWORDS
  990. ---------------------------------------------------------------------------------
  991.  
  992. abs(expr)
  993.     abs evaluates its parameter and returns the absolute value of the result; if expr
  994.     evaluates to a negative number abs chops off the minus sign, otherwise it just
  995.     returns the result of the evaluated expr.
  996.  
  997. channel(expr1,expr2)
  998.     the channel command provides a way to switch different channels on and off.
  999.     The first expression should evaluate to a channel number (0 for channel ‘a’, 1
  1000.     for channel ‘b’, etc); the second expression is interpreted as a boolean value
  1001.     (true or false) and is used to either make the channel in expr1 active or make it
  1002.     make it inactive.  Returns nothing.
  1003.  
  1004. colortab “table name”
  1005.     sets the current channels’ colour table to the table “table name”, if it exists. If
  1006.     not, or if colour tables are not used in the current channels’ image filters,
  1007.     nothing happens.  Returns nothing.
  1008.  
  1009. display(“string”)
  1010.     displays the string in the message window. See message window (p  ).
  1011.  
  1012. display(expr)
  1013.     evaluates the expression and displays the result in the message window. See
  1014.     message window (p  ).
  1015.  
  1016. end
  1017.     end is the statement which terminates execution of a script, and signals BigEye
  1018.     to stop executing the current sequence of code and check the next object,
  1019.     region or whatever.
  1020.  
  1021. false
  1022. true
  1023.     these are numeric constants, internally to the program they are equivalent to 0
  1024.     (false) and non-zero (true). They are mainly used to improve the readability of
  1025.     pieces of code, for instance in an if statement.
  1026.  
  1027. if(expr)
  1028. else
  1029. if (expr)   <comp-stmnt1> 
  1030. if (expr)  <comp-stmnt1>  else  <comp-stmnt2> 
  1031.   
  1032.     Conditional execution; <comp-stmnt> here means any one statement or a
  1033.     series of statements between braces '{' and '}'. If the expression evaluates to a
  1034.     non-zero value (to true) comp_stmnt1 will be executed, if it is false (zero)
  1035.     comp-stmnt2 will be executed.
  1036.  
  1037. int(expr)
  1038.     converts any expression into an integer value, that is, the fractional part of the
  1039.     expression is simply chopped off, no rounding is performed. Normally you will
  1040.     not need to use this call, because BigEye will automatically perform this
  1041.     operation when necessary. When testing the equality of the integer part of two
  1042.     numbers, however, it may be very useful; 
  1043.  
  1044. actsense()
  1045.     actsense sends a midi active sensing message ($FE, 254); generally not of much
  1046.     use, but it can, with most synthesizers, be very effective as an all notes off
  1047.     command.
  1048.  
  1049. ctr(expr1,expr2,expr3)
  1050.     sends a midi controller message, expr1 will be automatically limited to a number
  1051.     between 0 and 15 (for midi channel), expr2 and 3 are limited to 0 to 127.
  1052.  
  1053. mfstart(ident,expr)
  1054.     Starts playing a midi file sequence, ident is a name you will be using to refer to
  1055.     this particular midi file. Expr is evaluated and, if it is non zero, the sequence will
  1056.     be started in ‘loop mode’, when the sequence is at the end, it will loop and
  1057.     start again. When expr evaluates to zero the sequence is started and played
  1058.     only once. BigEye will ask you for the actual midi file you are referring to using
  1059.     ident at compile time (with an Initialize - p   - command).
  1060.  
  1061. mfstop(ident)
  1062.     Stops playback of the sequence ident.
  1063.  
  1064. mfstatus(ident)
  1065.     This command is only used in expressions, and returns a one if the sequence is
  1066.     still playing, or a zero if the sequence has finished.
  1067.  
  1068. if(!mfstatus(riff)) mfstart(riff,0)
  1069.  
  1070.     is used, for instance,  to make sure you don’t start two copies of the same
  1071.     sequence playing at the same time.
  1072.  
  1073. mftempo(ident,expr)
  1074.     This command allows you to dynamically change the tempo of playback of the
  1075.     sequence ident. A tempo of one is normal speed, as defined in the midi file the
  1076.     sequence was loaded from, 2 is twice normal speed and 0.5 is half speed.
  1077.  
  1078. midicont()
  1079.     Midi continue message.
  1080.  
  1081. midireset()
  1082.     Midi reset message ($FF)
  1083.  
  1084. midistart()
  1085.     Midi start message.
  1086.  
  1087. midistop()
  1088.     Midi stop message.
  1089.  
  1090. nof(expr1,expr2,expr3)
  1091.     Midi note off command, sends an actual note off command (as opposed to a
  1092.     note on command with zero velocity). expr1 is the channel, expr2 the note
  1093.     number and expr3 the off velocity.
  1094.  
  1095. non(expr1,expr2,expr3)
  1096.     Mid note on command, expr1 is the channel, expr2 the note number and
  1097.     expr3 the velocity. This command does not send any note off command, see
  1098.     the note command for this. 
  1099.  
  1100. note(expr1,expr2,expr3,expr4)
  1101.     Midi note command, expr1 is the channel, expr2 the note number expr3 the
  1102.     velocity and expr4 is the duration of the note. After this duration (in 5
  1103.     millisecond units) BigEye sends a matching note off command.
  1104.  
  1105. pbd(expr1,expr2,expr3)
  1106.     Midi pitch bend message, expr1 is the midi channel, expr2 is the least significant
  1107.     7 bits of the bend, expr2 the most significant 7 bits. Generally expr2 is irrelevant
  1108.     and set to 64; expr3 is the actual bend value (64 no bend, 0 down all the way
  1109.     and 127 is up all the way).
  1110.  
  1111. pgc(expr1,expr2)
  1112.     Midi program change. expr1 is midi channel, expr2 is the actual program to be
  1113.     selected.
  1114.  
  1115. pkp(expr1,expr2,expr3)
  1116.     Midi key pressure command; expr1 is midi channel, expr2 is the key number
  1117.     and expr3 is the pressure value.
  1118.  
  1119. prs(expr1,expr2)
  1120.     Midi channel pressure, expr1 is midi channel and expr2 is the pressure value.
  1121.  
  1122. songpos(expr1,expr2)
  1123.     Midi song position select, expr1 is the least significant 7 bits, expr2 the most
  1124.     significant 7.
  1125.  
  1126. songsel(expr) 
  1127.     Midi song select, expr is the song number.
  1128.  
  1129. sysex(expr, ...)
  1130.     Midi sysex (actually just raw midi); for sysex you have to provide the header
  1131.     ($F0) and the end ($F7). The comma separated list of expressions are - one by
  1132.     one - evaluated and send out the midi port without any interpretation.
  1133.  
  1134. timeclc(expr1)
  1135.     Midi timeclock.
  1136. timecode()
  1137.     Midi time code.
  1138.  
  1139. tunerec(expr)
  1140.     Midi tune request; expr is tune number.
  1141.  
  1142. proc(p1,p2)
  1143.     Starts a procedure definition; p1 and p2 are optional parameters to the
  1144.     procedure. See procedures (p  ).
  1145.  
  1146. endproc
  1147.     closes the definition of a procedure, this is where a procedure stops executing
  1148.     when called from elsewhere. Also, after an endproc, variable declarations will
  1149.     stop generating local variables . See procedures (p  ) and variables (p  ).
  1150.  
  1151. random(expr)
  1152.     Evaluates the expr and then returns a random number in the range [0 - expr).
  1153.     See also rseed.
  1154.  
  1155. rseed(expr);
  1156.     The rseed command primes the random generator, to get a sequence of ran-
  1157.     dom numbers several times (that is: the same sequence) use rseed with the
  1158.     same  value; what this value is not important, it only matters that the value is
  1159.     the same as the last time.
  1160.  
  1161. schedule(expr,proc,p1,p2)
  1162.     schedules a procedure to execute at a future time. expr is evaluated, and is in-
  1163.     terpreted in 5 millisecond units, (so 200 will be one second). proc is the name of
  1164.     the procedure (see procedures, p  ) to be executed expr times 5 ms in the
  1165.     future. If the procedure takes parameters, p1 and p2 will be used as such. If
  1166.     the procedure just takes one parameter you can leave out p2 from the
  1167.     schedule statement, if the procedure takes no parameters at all leave out both
  1168.     p1 and p2. Scheduled procedures execute under interrupt, please read the
  1169.     relevant section of the manual (p ).
  1170.  
  1171. screen “new screen”, expr
  1172.     will swap the current screen of channel expr to the screen “new screen”. If the
  1173.     old screen has a stop-script, this will be executed prior to the swap. If the “new
  1174.     screen” has a start-script, this script will be executed after the swap.
  1175.  
  1176. smooth <ident>,<number>
  1177.     This command defines a ‘smoother’, with name ‘ident’. The <number> defines
  1178.     the length of the ‘smoother’, larger numbers smooth more. The smoother in
  1179.     fact just returns the average of the last <number> of uses of the smoother.
  1180.     You use the smoother by calling the <ident> as if it were a procedure (p )
  1181.     with one parameter. It returns the smoothed value.
  1182.  
  1183.     smooth direction_smoother,10// declaration
  1184.  
  1185.  
  1186.     // and the use it like this:
  1187.     direction = direction_smoother(object_direction)
  1188.  
  1189.     to have the variable direction be the average of the last 10 object_directions.
  1190.     Accepted values for the <number> are from 2 to 100.
  1191.  
  1192. table <identifier>  [<numeric>,(<numeric>, ... )];
  1193.  
  1194. table convert [1,3.14,5,7,9,11,13,15,17,19,21,23,25];
  1195. table convert [lin,256,0,127];
  1196. table convert [ 1.0,2.4,3.14,4,5,6,7,8,9,ran,20,1,3,22];
  1197.  
  1198.     Tables are data structures in memory consisting of a predefined number of
  1199.     consecutive variables.  The length of these tables is fixed when they are defined
  1200.     and cannot be altered dynamically. The examples initialize the tables. In cases
  1201.     where you don’t need something specific in the table at the start, as in defining 
  1202.     a buffer for storing values, use a lin,256,0,0 (for a table with 256 entries).  To
  1203.     access an element in a table you use an offset between square brackets, no
  1204.     bounds checking is performed, you should see to it that you don’t address
  1205.     anything beyond the defined length of the table, you may be overwriting other
  1206.     tables or worse. Negative offsets are allowed, if you can find a use for them.
  1207.  
  1208.     <numeric> in the syntax definition stands for one of five things:
  1209.     •A simple number, decimal or hexadecimal ($ - prefix, integer only)
  1210.     •a lin keyword; this word stands for linear and defines a linear stretch of
  1211.         numbers. It takes the next three numbers as parameters, first a length, then a
  1212.         start value and lastly an end value:
  1213.     lin,256,0,127
  1214.     defines 256 bytes of which the first is a 0, the last is a 127 and the 
  1215.     254 bytes between these two run linearly between these two.
  1216.  
  1217.     •a ran keyword; this word stands for random and defines a random stretch
  1218.         of numbers. It takes the next three numbers as parameters, first a length, then
  1219.         a minimum value and lastly a maximum value;
  1220.     ran,20,10,30
  1221.     defines 20 random bytes, never lower than 10 and never higher than 30. 
  1222.  
  1223. var <identifier> ( = <number)(, <identifier> ( = number), ...)
  1224.  
  1225. var a;
  1226. var x,y,z;
  1227. var sustain = false;
  1228. var breath = 2, modulation = 1, pan = 10;
  1229.  
  1230.     This keyword defines a basic variable (floating point, range ± 1.17549e-38 to
  1231.     3.40282e38) , it can later be referred to by its name (the identifier). The
  1232.     optional initialization can set the value the variable starts out with, after
  1233.     initialisation (command I).
  1234.  
  1235. while(expr)   <comp-stmnt1>
  1236.  
  1237.     Executes  <comp-stmnt1>  (see above under if)  repeatedly until expr be-
  1238.     comes false. This implies that somewhere in <comp-stmnt1> something
  1239.     should happen that influences the expr, otherwise you would end up with a
  1240.     loop which would never exit and BigEye would never execute anything else
  1241.     until a reset (it would ‘hang’).
  1242.  
  1243. ---------------------------------------------------------------------------------
  1244. PROCEDURES
  1245. ---------------------------------------------------------------------------------
  1246.  
  1247. When you have a section of code that you want to use in a variety of places, you
  1248. may be tempted to copy the relevant code to wherever you will be using it. This
  1249. would be a mistake. A procedure is  a piece of code that you can call from all
  1250. scripts in BigEye, but write only once. A procedure can simply execute some
  1251. code, or can do a specific calculation and return the result to the calling code.
  1252. An example of the first kind if a procedure which steps through a number of
  1253. defined screens:
  1254.  
  1255. var CurrentScreen=0;            // define a var to keep 
  1256.                             // track of where we are
  1257. proc StepScreen()                // start proc definition
  1258.     if(CurrentScreen == 0) {        // if we are at 0
  1259.         CurrentScreen = 1
  1260.         screen “screen 1”,0    // swap to 1
  1261.     }
  1262.     else if(CurrentScreen == 1) {
  1263.         CurrentScreen = 2
  1264.         screen “screen 2”,0
  1265.     }
  1266.     else {
  1267.         CurrentScreen = 0
  1268.         screen “screen 0”,0
  1269.     }
  1270. endproc                        // end of procedure def
  1271.  
  1272. As an example of the calculating kind of procedure, here is one that scales the x
  1273. coordinate into the (midi) 0 to 127 range, relative to the region the object is in:
  1274.  
  1275. proc scaleX()
  1276.     var x,regionwidth;
  1277.     regionwidth = region_max_x - region_min_x
  1278.     x = x_position - region_min_x
  1279.     scaleX = (x * 127) / regionwidth
  1280. endproc
  1281.  
  1282. As you can see to return a value from a procedure you end the procedure
  1283. with an assignment to the procedure name, as if it was a variable. This proc will
  1284. return a zero when the object which caused this proc to be called is at the
  1285. extreme left of the region, and a 127 when the object is at the extreme right.
  1286. Many times you will want to use the same code to calculate something, but with
  1287. different numbers. Procedures therefore can take up to two parameters.
  1288. Parameters are ‘given’ to the procedure by including them in the brackets when
  1289. calling the procedure. In the procedure definition you will of course have to make
  1290. clear that this is a propcedure that takes parameters by including two ‘names’ in
  1291. the definitions’ brackets. These names will then act as variables in the body of the
  1292. procedure. In the above example, if you want to scale the x_position  value into
  1293. another range than the 0 to 127 range:
  1294.  
  1295. proc scaleX(min,max)
  1296.     var x,regionwidth, targetwidth
  1297.     regionwidth = region_max_x - region_min_x
  1298.     targetwidth = max - min;
  1299.     x = x_position - region_min_x
  1300.     scaleX = min + (x * targetwidth) / regionwidth
  1301. endproc
  1302.  
  1303. When called for instance as follows: 
  1304.  
  1305. tempvar = scaleX(30,70)
  1306.  
  1307. this proc will return 30 when the object which caused this proc to be called is at
  1308. the extreme left of the region, and 70 when the object is at the extreme right.
  1309. The parameters min and max in the above example are variable and can be used
  1310. as such within the body of the procedure. Outside the procedure, however the
  1311. will not be known anywhere.
  1312. A last example which just takes one parameter:
  1313.  
  1314. proc cube(value)
  1315.     cube = value * value * value
  1316. endproc
  1317.  
  1318. ---------------------------------------------------------------------------------
  1319. THE SCHEDULER
  1320. ---------------------------------------------------------------------------------
  1321.  
  1322. BigEye provides a real time scheduler to play midi files and to schedule note off
  1323. events when you use a note event. If you are in script mode you will also have
  1324. direct acces to this scheduler, giving you the opportunity to schedule procedures to
  1325. be executed at a certain, specified time in the future, with a five ms resolution. 
  1326. Since the code you specify to be scheduled will be executed at the computer
  1327. interrupt level it is sure to be executed on time, the scheduler can therefore be
  1328. used to generate musical sequences with sufficient temporal accuracy. Since your
  1329. code will be executed at the interrupt level it will be extremely important that your
  1330. code is short and correct; it will be extremely easy for you to crash the whole
  1331. computer. 
  1332. Since your scripts may or may not be executing at the time that your scheduled
  1333. code ‘fires’, and, if your scripts are executing, there is no way to tell where in the
  1334. scripts the computer is at that time, you cannot use the predefined variables at
  1335. all in scheduled code. From the standpoint of that code they would just contain
  1336. garbage. If you do need to use them in scheduled code there are two options
  1337. available: you can copy them into a global variable (a variable defined in the global
  1338. script) prior to scheduling your code (and also while you have a scheduled loop
  1339. running). Also, you can pass them to your scheduled routine as parameters (only
  1340. two, though). See the schedule command p  . 
  1341. Since a scheduled routine can re- schedule itself it is fairly easy to make a
  1342. scheduled loop:
  1343.  
  1344. proc EverySecond()
  1345.     // do something useful here //
  1346.     schedule(200,EverySecond)
  1347. endproc
  1348.  
  1349. Once called from somewhere (maybe the startscript of the first screen of
  1350. channel a) this routine will be running every second. To stop a routine like this
  1351. from running hit the space bar whenever you have a channel window frontmost.
  1352. Since you can pass parameters to scheduled routines an easy next step, for
  1353. instance, is to program a ‘bouncing’ note:
  1354.  
  1355. proc Bounce(time)
  1356.     note(0,60,100,50)
  1357.     if(time > 10) schedule(time,Bounce,time * 0.9)
  1358. endproc
  1359.  
  1360. The time parameter will decrease with every call, eventually getting smaller than
  1361. 10 to stop the scheduling process altogether. You will call Bounce(200), for
  1362. instance, from anywhere in your code to set one off. There is, by the way,
  1363. nothing to stop you from scheduling the same routine multiple times; you can have
  1364. several of these ‘bouncing notes’ going at the same time. 
  1365. A simple rhythm structure can be made with the help of a table:
  1366.  
  1367. table delays[100,50,50,100,50,50,50,50]
  1368. proc rhythm(index)
  1369.     note(9,60,100,50)
  1370.     if(index > 7) index = 0
  1371.     if(flag) schedule(delays[index],rhythm,index+1)
  1372. endproc
  1373.  
  1374. Here you would start the loop by setting flag = 1 and then calling rythm(0)
  1375. in response to some event. To stop the loop you simply set flag = 0.
  1376.  
  1377. ---------------------------------------------------------------------------------
  1378. THE MENUS
  1379. ---------------------------------------------------------------------------------
  1380.  
  1381. FILE
  1382.  
  1383. •new
  1384.     Will check if you want to save your current work, after this will present you
  1385.     with a new, fresh and empty performance called Untitled.
  1386. •open
  1387.     You are presented with an open dialog box,  showing you text files, table files,
  1388.     screen files and BigEye performance files. The first three can be appended to
  1389.     the existing tables, screens or scripts or can replace them (you will be asked). If
  1390.     you open a performance file, you will first be asked to save your current work.
  1391.     Opening a text file will enter all of the contents of this file into the ‘global’ scripts.
  1392.     From there you can copy it around if necessary.
  1393. •close
  1394.     Will close the front window, nothing will be lost, the window can always be
  1395.     opened again.
  1396. •save
  1397.     Saves the current performance to disk, under it’s own name. If you haven’t
  1398.     saved yet (if the name is ‘Untitled’) you will be presented with a standard save
  1399.     dialog box.
  1400. •save as
  1401.     Saves the performance under a new name, or in a different place. You will get
  1402.     the standard save file dialog.
  1403. •save colour tables
  1404.     Allows you to separately save the colour tables to a file, which you may later
  1405.     read into a different performance and append to you colour tables there, or
  1406.     just read them in to replace any colour tables you may already have made
  1407.     there.
  1408. •save screens
  1409.     Like the colour tables, you can save your screens (including any scripts) to a
  1410.     separate screens file.
  1411. •save scripts
  1412.     This command will save all you scripts into one (1) text file, first the global scripts
  1413.     and the all the screens with their start, stop and region scripts.
  1414. •page setup
  1415.     Standard page setup dialog for printing.
  1416. •print
  1417.     not implemented yet
  1418. •quit
  1419.     If you’ve made any changes you will be prompted to save your work.
  1420.  
  1421.  
  1422. EDIT
  1423.  
  1424.  
  1425. •undo
  1426.     This command only  works in the script editor, and undoes the last destructive
  1427.     command, like clear or paste. There is only one undo, and no ‘redo’.
  1428. •cut
  1429.     Standard Macintosh cut operation, in the script editor it copies the selected text
  1430.     to the clipboard, then deletes it; in the screen editor it copies the selected
  1431.     regions, including their scripts, to the clipboard before deleting them.
  1432. •copy
  1433.     Copies selected text (in scripts editor) or selected regions with their scripts to
  1434.     the clipboard.
  1435. •paste
  1436.     Pastes the contents of the clipboard (if any) into either the current script in the
  1437.     script editor, or, if you are in the region editor and there are regions on the
  1438.     clipboard, into the current screen.
  1439. •clear
  1440.     Clears selected text or selected regions from you file. Clearing regions is not
  1441.     undoable!
  1442. •select all
  1443.     Selects all text if you are in the script editor, all regions if you are in the screen
  1444.     editor.
  1445. •preferences
  1446.     Most of BigEye’s preferences are saved automatically when you quit the
  1447.     program (things like font, window position, etc). You will therefore probably not
  1448.     need to use the preferences dialog much. The one thing in the preferences
  1449.     dialog you are most likely to need is the initialize on load checkbox. This,
  1450.     when active, makes BigEye perform an initialize command on the file it just
  1451.     loaded, allowing you to put a BigEye performance file in the system startup
  1452.     folder so that when the computer starts up the performance will run automati-
  1453.     cally. 
  1454.     The next one you may need to adjust is the midi file buffer. When you are
  1455.     using midi files and perform an Initialize BigEye will load and preprocess the
  1456.     midi files you will be using. For this operation BigEye needs a buffer in memory.
  1457.     With big midi files this buffer may not be large enough in the default setting, you
  1458.     will get the message ‘midi file too big’. When this happens you can adjust the
  1459.     size of this buffer in the preferences dialog. You will have to restart BigEye and
  1460.     reload you performance after changing this value.
  1461.     The other three parameters, variable space, code space and table space
  1462.     will most likely be enough in the default setting. When you get a message ‘Out
  1463.     of code space’, ‘Out of variable space’ or ‘Out of table space’ you can adjust
  1464.     the values here. These parameters are concerned with the internal BigEye
  1465.     buffer for processing scripts. The one most likely to cause trouble  is the table
  1466.     space parameter when you are using really big tables. You will find the space
  1467.     used in your current file by issuing an Initialize and checking the values
  1468.     between braces, after the numbers. Again, restart BigEye and reload your
  1469.     performance to effect the changes.
  1470.  
  1471. SOURCE
  1472.  
  1473. •movie
  1474.     You will be presented with a standard open dialog to open a Quicktime movie
  1475.     file. This movie will from then on loop and be routed to the video processing
  1476.     software of BigEye. Everything will act exactly as if it was live video input, except
  1477.     the difference module. Since on most machines BigEye processes movie
  1478.     frames faster than the actual frame update rate from the Quicktime file, BigEye
  1479.     grabs the same frame more than once. For most modules this is no problem,
  1480.     but the difference between to frames which are equal is zero. Therefore you
  1481.     will need Quicktime movies with a very high frame rate (about 30 fps on a 7100
  1482.     / 66) or forsake the use of the difference module. 
  1483. •video
  1484.     Selects the video digitizer as input. If you have no video digitizer in your system
  1485.     this item will be disabled. If you have multiple digitizers use the digitizer settings
  1486.     window (p  ) to select which digitizer you will use.
  1487. •animation
  1488.     Selects a simple animation of four coloured balls as an input to the analysis
  1489.     software. Useful for testing purposes only.
  1490.  
  1491.  
  1492. WINDOWS
  1493.  
  1494. •table edit
  1495.     Opens or activates the colour table edit window.
  1496. •regions & masks
  1497.     Opens or selects the screen edit window.
  1498. •digitizer settings
  1499.     Opens or selects the digitizer settings window.
  1500. •script edit
  1501.     Opens or selects the script edit window. You will have to be in script mode to
  1502.     have this item enabled.
  1503. •new channel
  1504.     Opens a new channel (if you don’t have sixteen channels open already) channel
  1505.     keyboard shortcuts are command - one through command - zero for the first
  1506.     ten channels. Closing a channel window does not delete it, it just hides the
  1507.     window. When you want to delete a channel hold the option key down
  1508.     while closing the channels’ window. You will be asked to confirm.
  1509. •channel a, ...
  1510.     Depending on how many channels you have opened you will find a number of
  1511.     menu entries here to open their window or bring them to the front.
  1512.  
  1513.  
  1514. CONFIGURATION
  1515.  
  1516. •mirror input
  1517.     For people who have trouble working with an image which is not mirrored; at a
  1518.     slight cost in processing time you can swap left and right before any processing.
  1519.     This setting is stored in the performance file.
  1520. •script mode
  1521.     To activate script mode for a particular performance.
  1522. •mute midi
  1523.     Mutes all midi output.
  1524. •monitor
  1525.     Toggles the monitor view on and off.
  1526.     In an actual performance the small monitor in the channel window is often too
  1527.     small to be of much use from a larger distance. To alleviate this problem BigEye
  1528.     provides a (big) monitor window. It only works, however, with channel a.
  1529.     When you choose monitor from the configuration the whole screen is taken
  1530.     over by a big, black window. In this window you will see the regions of the
  1531.     screen you are currently in, and moving around in this window you will see one
  1532.     or more numbers. These numbers are the actual objects BigEye is seeing at
  1533.     that moment, they change size according to the size of the object they
  1534.     represent. If you are not so much concerned with speed the monitor window
  1535.     offers you two more views. The view in the channel a monitor window can be
  1536.     stretched across the whole monitor by hitting (when you have activated the
  1537.     monitor window) tab once. This slows down performance to a great extend.
  1538.     Hitting tab again produces a smaller version of your channel monitor view, a bit
  1539.     faster, but still costing a lot of speed. Hitting tab again brings you back into the
  1540.     big, black monitor view. The only way out of the monitor view is by hitting the
  1541.     command-M keyboard shortcut again to deactivate the monitor.
  1542.     When you have a second monitor attached to your computer the monitor
  1543.     window will be displayed on this one, leaving you access to your other win-
  1544.     dows. The channel monitor view will not be active, however, as long as you
  1545.     have the monitor view up.
  1546. •initialize & run
  1547.     Whenever you have edited one of your scripts you will need to recompile
  1548.     them. This is (among other things) what Initialize does. It will also run the code
  1549.     in the startscripts of the screens you have selected in all used channels. When
  1550.     you hold the option key while choosing Initialize you will zap the midi file
  1551.     references. Normally BigEye will remember which midi files you are using
  1552.     after it has asked you for them once, this option allows you make BigEye forget
  1553.     about those files and forces BigEye to ask you for them again. 
  1554. -------------------------------------------------------------------------------
  1555.  
  1556.     STEIM FOUNDATION
  1557.     HTTP://www.xs4all.nl/~steim
  1558.  
  1559.  
  1560.